// pages/play/play.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        //歌曲id列表
        idlist: {},
        //歌曲列表
        musiclist: [],
        //当前歌曲下标
        nowIndex: "",
        //当前歌曲数据
        music: {},
        //歌曲id
        musicid: "",
        //歌曲url
        musicplay: "",
        //控制播放方法
        action: {
            "method": "play"
        },
        //定义歌词数据
        lrcdata: [],
        //当前播放歌词的下标
        index: -1,
        //滚动条位置
        top: 0,
        //播放模式
        mode: 'loop',
        //字符串形式id
        IDlistarr:[],
        //歌曲左边时间
        starttime:"00:00",
        //总时长
        endtime:"04:21",
        //进度条最大值
        max:0,
        //当前播放位置
        move:0
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        // console.log(options);
        //获取传过来的歌曲数据
        const eventChannel = this.getOpenerEventChannel()
        eventChannel.on('acceptDataFromOpenerPage', data => {
            //从singerl.js接口拿过来的歌曲数据
            // console.log(data.data)
            const nowIndex = data.data.nowIndex
            const musiclist = data.data.musiclist
            //当前播放歌曲
            const music = musiclist[nowIndex]
            const musicid = data.data.musiclist[nowIndex].id
            // console.log(musicid);
            const idlist = data.data.idlist
            // console.log(idlist);
            //转成字符串形式
            var idliststr = idlist.toString()
            // console.log(idliststr);
            var Idlistarr =  idliststr.split(",")
            // console.log(Idlistarr);
            //赋值
            this.setData({
                nowIndex: nowIndex,
                musiclist: musiclist,
                music: music,
                musicid: musicid,
                idlist: idlist,
                IDlistarr:Idlistarr
            })
            // console.log(this.data.IDlistarr);
        })
        //调用获取歌曲详情方法
        this.getmusicdetail()
        this.getmusicplay()
        this.getlry()
    },
    
    //歌曲详情接口
    getmusicdetail: function () {
        wx.request({
            url: 'http://localhost:3000/song/detail?ids=' + this.data.musicid,
            success: (result) => {
                // console.log(result);
                this.setData({
                    music: result.data.songs[0]
                })
            },
        })
    },
    //歌曲播放URL接口
    getmusicplay: function () {
        wx.request({
            url: 'http://localhost:3000/song/url?id=' + this.data.musicid,
            success: (result) => {
                // console.log(result);
                this.setData({
                    musicplay: result.data.data[0].url,
                })
                this.next()
            },
        })
    },
    next(){
        this.setData({
            action: {
                "method": "play"
            }
        })
    },
    //播放控制
    playdate: function () {
        //获取当前状态
        let date = this.data.action.method
        //判断当前状态
        if (date === "play") {
            this.setData({
                action: {
                    "method": "pause"
                }
            })
        } else {
            this.setData({
                action: {
                    "method": "play"
                }
            })
        }
    },
    //获取歌词接口
    getlry: function () {
        wx.request({
            url: 'http://localhost:3000/lyric?id=' + this.data.musicid,
            success: (result) => {
                // console.log(result.data.lrc.lyric);
                const lrcsrt = result.data.lrc.lyric
                //整理歌词 将歌词参数传到下面函数
                this.setlrcshow(lrcsrt)
            },
        })
    },
    /* 
[00:29.499]电视一直闪
[00:33.141]联络方式都还没删
[00:36.846]你待我的好
[00:40.452]我却错手毁掉
[00:44.092]也曾一起想
[00:47.723]有个地方睡觉吃饭
[00:51.374]可怎么去熬 日夜颠倒
[00:54.763]连头款也凑不到
    */
    //整理歌词
    setlrcshow: function (lrc) {
        //定义空列表
        let lrcdata = []
        //歌词是一整个字符串还带有换行  要先拆分
        const lrclist = lrc.split("\n")
        //拆分出来是一个数组形式的
        // console.log(lrclist);
        //拆分完成之后 分离时间与歌词
        // 定义正则 [00:54.763]
        const re = /\[\d{2}:\d{2}\.\d{2,3}\]/
        //遍历列表
        lrclist.forEach(item => {
            if (item) {
                //获取时间
                let itemdate = item.match(re)
                //时间
                // console.log(itemdate);
                //判断 剔除掉 空时间
                if (itemdate) {
                    //拿到时间字符串
                    itemdate = itemdate[0]
                    //整理一下时间-拆分出中括号
                    itemdate = itemdate.slice(1, -1)
                    //转换成具有计算意义的秒
                    const timelist = itemdate.split(":")
                    const time0 = timelist[0]
                    const time1 = timelist[1]
                    //整理最终拿到的值
                    const time = parseFloat(time0) * 60 + parseFloat(time1)
                    //拿到转换成秒的时间
                    // console.log(time);
                    //找歌词 替换方法把符合时间的清除掉
                    const lrcstr = item.replace(re, "")
                    //歌词
                    // console.log(lrcstr);
                    //给歌词和时间进行匹配整合存储到列表中
                    lrcdata.push([time, lrcstr])
                    // console.log(lrcdata);
                }
            }
        });
        //储存 
        this.setData({
            lrcdata: lrcdata
        })
    },
    timechange: function (res) {
        //console.log(res.detail.currentTime);
        //当前播放的时间
        var playtime = res.detail.currentTime
        //拿到歌词的时间
        var lrcdata = this.data.lrcdata
        //遍历二维数组
        for (var i = 0; i < lrcdata.length - 1; i++) {
            //console.log(lrcdata[i][0]);
            //每一句歌词区间判断
            if (lrcdata[i][0] < playtime && playtime < lrcdata[i + 1][0]) {
                //拿到当前播放歌词下标
                this.setData({
                    index: i
                })
            }
        }
        //定位自动滚动
        //拿到刚刚的index
        var index = this.data.index
        if (index > 5) {
            this.setData({
                top: (index - 5) * 45
            })
            // console.log((index-5)*45);
        }
        //进度条时间的数据更新
        // console.log(playtime);
        /* 
            playtime当前播放的时间 进行分秒的格式化
            总时长进行格式化 并 存储
        */
    //    console.log(res.detail.duration);
       //总时长
       var timelength = res.detail.duration
        var sum_m = Math.floor(timelength/60)
        var sum_s = Math.floor(timelength%60)
        //个位数补齐0的操作
        if(sum_m<10){
            sum_m="0"+sum_m
        }
        if(sum_s<10){
            sum_s="0"+sum_s
        }
        // console.log(sum_m+":"+sum_s);
        //定义播放时间
        var play_m = Math.floor(playtime/60)
        var play_s = Math.floor(playtime%60)
        //个位数补齐0的操作
        if(play_m<10){
            play_m="0"+play_m
        }
        if(play_s<10){
            play_s="0"+play_s
        }
        //数据更新
        this.setData({
            starttime:play_m+":"+play_s,
            endtime:sum_m+":"+sum_s,
            max:timelength,
            move:playtime
        })


    },
    //切换模式 图标更改
    changemode: function () {
        if (this.data.mode == 'loop') {
            this.setData({
                mode: 'single'
            })
        } else {
            this.setData({
                mode: 'loop'
            })
        }
    },
    //当歌曲播放完毕执行方法
    changeMusic: function () {
        //判断当前的模式来进行切换
        var mode = this.data.mode
        //single 单曲循环 loop 循环播放
        if (mode == 'single') {
            //单曲循环 设置自己原本的id
            this.setData({
                musicid: this.data.musicid
            })
            //刷新播放状态
            this.setData({
                action: {
                    "method": "play"
                },
            })
        }else{
            this.nexSong()
        }
    },
    //循环下一首
    nexSong: function () {
        var id = this.data.musicid
        var idlist = this.data.IDlistarr
        //下标
        var index = 1
        //找当前歌曲下标
        for (var i = 0; i < idlist.length; i++) {
            if (id == idlist[i]) {
                index = i
                break
            }
        }
        //判断当前歌曲是否为最后一位 如果是则循环到第0位 如果不是则往后切歌
        if (index == idlist.length - 1) {
            this.setData({
                id: idlist[0]
            })
        } else {
            this.setData({
                musicid: idlist[index + 1]
            })
        }
        //重新执行调用音乐url接口
        this.getmusicplay()
        //调取歌曲详情接口
        this.getmusicdetail()
        //调取歌词接口
        this.getlry()
    },
    //上一首歌曲播放
    prevSong: function () {
        var id = this.data.musicid
        var idlist = this.data.IDlistarr
        //下标
        var index = 1
        //找当前歌曲下标
        for (var i = 0; i < idlist.length; i++) {
            if (id == idlist[i]) {
                index = i
                break
            }
        }
        // console.log(index);
        //判断当前歌曲是否为第一位 如果是则循环到最后一位 如果不是则往前切歌
        if (index === 0) {
            this.setData({
                musicid: idlist[idlist.length - 1]
            })
        } else {
            this.setData({
                musicid: idlist[index - 1]
            })
        }
        //重新执行调用音乐url接口
        this.getmusicplay()
        //调取歌曲详情接口
        this.getmusicdetail()
        //调取歌词接口
        this.getlry()
    },
    //拖动进度条效果
    sliderchange:function(e){
        console.log(e);
        //当前拖动的值
        var v = e.detail.value
        //进行move值的修改
        this.setData({
            move:v
        })
        //修改当前播放时间
        this.setData({
            action:{
                method:"setCurrentTime",
                data:v
            }
        })
        //更新播放状态为play
        this.setData({
            action:{
                method:"play",
            }
        })
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})